-- 官方文档
-- https://cloud.baidu.com/doc/OCR/s/zk3h7xz52

-- 作为个人开发者，我没有用这个
-- -- 免费 一会就用没了 (1000次)
-- -- 收费 - 太贵了
------------------------
-- 如果不好识别的，或者需要精准识别的，我采用 触动工具`字库工具`
-- -- 例如: 游戏中的 数字(需要用 fwindow 给用户展示) 需要精准

local RxOcrBaidu = {}

-- 图片尺寸：最短边至少 15px，最长边最大 4096px

function RxOcrBaidu:ocr(pic_name)
  RxLog('RxOcrBaidu:ocr  pic_name='..tostring(pic_name))
  if not pic_name then
    local errorMsg = 'RxOcrBaidu:ocr error 错误了，地址不存在'
    RxLog(errorMsg)
    return ''
  end
  local orcResult = ''

  local API = '...api...reset' -- 需要替换
  local Secret = '...Secret...reset' -- 需要替换
  local ts = require('ts')
  local cjson = ts.json

  --tab 参数仅支持 v1.3.3 及其以上版本 TSLib
  local tab = {
    language_type = "CHN_ENG",
    detect_direction = "true",
    detect_language = "false",
    paragraph = "true",
    probability = "true",
    ocrType = 2
  }

  local code1, access_token = getAccessToken(API, Secret)
  RxLog('RxOcrBaidu:test code1='..tostring(code1))
  RxLog('RxOcrBaidu:test access_token='..tostring(access_token))
  RxLog('RxOcrBaidu:test pic_name='..tostring(pic_name))
  pic_name = tostring(pic_name)
  if code1 and access_token then
    local code2, body = baiduAI(access_token, pic_name, tab)
    RxLog('RxOcrBaidu:test code2='..tostring(code2))
    RxLog('RxOcrBaidu:test code2 body='..tostring(body))
    if code2 and body then
      RxLog("RxOcrBaidu:test 识别成功\n" .. tostring(body))
      local tmp = cjson.decode(body) or {}
      if tmp then
        local words_result = tmp.words_result or {''}
        local words_first = words_result[1] or {}
        local words = words_first.words or ''
        RxLog('RxOcrBaidu:test words ='.. words)
        orcResult = words
      end
    else
      RxLog("RxOcrBaidu:test 识别失败\n" .. tostring(body))
      -- RxToast("RxOcrBaidu:test 识别失败\n" .. body)
    end
  else
    RxLog("RxOcrBaidu:test 获取 access_token 失败\n" .. tostring(access_token))
    -- RxToast("RxOcrBaidu:test 获取 access_token 失败\n" .. tostring(access_token))
  end
  return orcResult
end

function RxOcrBaidu:SafeOcr(pic_name)
  -- 使用不对？ 没有返回值
  RxLog('RxOcrBaidu:SafeOcr picName='..tostring(pic_name))
  local status, retval = pcall(RxOcrBaidu:ocr(pic_name))
  RxLog('RxOcrBaidu:SafeOcr status='..tostring(status)..' retval='..tostring(retval))
  if status then
    -- attempt to call a boolean value
    return retval
  else
    RxLog('RxOcrBaidu:SafeOcr 执行错误 retval='..tostring(retval))
  end
  return ''
end

return RxOcrBaidu